// 云函数入口文件
const cloud = require('wx-server-sdk')

// 报名参加
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database();
const _ = db.command;
// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext();
  const {name, phone,studyNumber,activeId, surfacePlot,title,provinces,detailAddress,startTime} = event.info;

  // 报名者个人信息存放在数组中
  const {nickName,avatarUrl} = event.userInfoObj;

  const userInfo = {
    phone,
    studyNumber,
    name,
    nickName,
    avatarUrl,
    openid:wxContext.OPENID
  }

  const result = await db.collection('applicationForm')
  .where({
    _id:activeId
  })
  .get();
  
  // 如果报名表中没有这条记录，则插入，否则进行数据的更新
  if(result&& result.data.length!==0){
    // 数据进行更新
    db.collection('applicationForm')
    .doc(activeId)
    .update({
      data:{
        list:_.push(userInfo)
      }
    })
  }else{
    db.collection('applicationForm').add({
      data:{
        _id:activeId,
        list:[userInfo]
      }
    })
    // 插入新数据
  }

  // 报名人数加一
  db.collection('publish')
  .doc(activeId)
  .update({
    data:{
      registeredCount:_.inc(1)
    }
  })
  
  // 写入数据库join，如果已经存在，则进行数据的更新，否则重新插入
  const joinResult = await db.collection('join')
  .where({
    openid:wxContext.OPENID,
    publish_id:activeId,
  })
  .get();
  // 如果joinResult存在，则表示数据库中已存在之前就已经报名了的，但是已经取消了的
  if(joinResult&&joinResult.data.length!==0){
    // 数据进行更新
    db.collection('join')
    .where({
      openid:wxContext.OPENID,
      publish_id:activeId,
    })
    .update({
      data:{
        name,
        phone,
        studyNumber,
        status:1,// 表示参加
        time:new Date()
      }
    })
  }else{
    // 插入新的数据
    db.collection('join').add({
      data:{
        publish_id:activeId,
        name,
        phone,
        studyNumber,
        surfacePlot,
        title,
        provinces,
        detailAddress,
        startTime:new Date(startTime),
        status:1,// 表示参加
        openid:wxContext.OPENID,
        time:new Date()
      }
    })
  }
}